package dletc.FileInputStream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
 * int read(byte[] b)
 * 	一次最多读取b.length个字节
 * 	减少硬盘和内存的交互，提高程序的执行效率。
 * 	默认文件路径都是在项目根目录下作为起始位置。
 *
 */
public class FileInputStream02 {

	public static void main(String[] args) {
		// 创建文件字节输入流对象
		FileInputStream fis = null;
		try {
			//可以创建对象时直接写路径，也可以放File类型文件。
			fis = new FileInputStream("D:\\Users\\jinho\\JavaSE\\day32\\A.txt");
			/*一个一个读 太慢了 改进
			 * int readDate; //返回值是：读取到的“字节”本身。读不到数据，返回“-1”
			//System.out.println(readDate); //99
			while((readDate = fis.read()) != -1){
				//chinaä¸­å½ä¸å²   字节输入流 一个一个字节读  读不出汉字。
				System.out.print((char)readDate);
			}*/
			
			byte[] by = new byte[5];
			int readData; //readData现在是 读取到数组中的数量（不再是字节本身），当读取完毕后返回的是-1。
			while((readData = fis.read(by)) != -1){
				
				//方法一：遍历数据 不能小于 by.length长度 会有重复
				/*for (int i = 0; i < readData; i++) {
					System.out.println(by[i]);
				}*/
				
				//方法二：将byte数组转换成String
				//String str = new String(by,0,readData);  将byte数组转String 不是都转 从0索引开始  长度是readData
				System.out.print(new String(by,0,readData));
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			//关闭流前先判断 是不是空，为空不用关闭。
			if (fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

}
